package com.wanxi.service.Impl;

import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import com.wanxi.dao.Impl.NewsTypeDaoImpl;
import com.wanxi.dao.NewsTypeDao;
import com.wanxi.dto.ResultDTO;
import com.wanxi.model.Image;
import com.wanxi.model.NewsType;
import com.wanxi.service.NewsTypeService;
import com.wanxi.util.JSONCopy;
import com.wanxi.util.RedisTool;
import com.wanxi.vo.NewsTypeVO;

import java.util.Iterator;
import java.util.List;

public class NewsTypeServiceImpl implements NewsTypeService {
    NewsTypeDao newsTypeDao=new NewsTypeDaoImpl();
    @Override
    public ResultDTO findAllNewsType() {
        List<NewsType> list =newsTypeDao.findAllNewsType();
        if(list.size()>0){
            return ResultDTO.getDTO(list.size(),list);
        }
        return ResultDTO.builder().data(list).msg("no data").count(0).code(1).build();
    }

    @Override
    public ResultDTO findNewsTypeById(NewsTypeVO newsTypeVO) {
        NewsType newsType= JSONCopy.copy(newsTypeVO, NewsType.class);
        NewsType nt=newsTypeDao.findNewsTypeById(newsType);
        if(nt!=null){
            return ResultDTO.getDTO(1,nt);
        }
        return ResultDTO.builder().count(0).msg("error").code(1).build();
    }

    @Override
    public ResultDTO updateEnable(NewsTypeVO newsTypeVO) {
        NewsType newsType= JSONCopy.copy(newsTypeVO, NewsType.class);
        int i=newsTypeDao.updateEnable(newsType);
        if(i==1){
            RedisTool.deleteToRedis("newsType");
            return ResultDTO.getDTO(i,newsTypeVO);
        }
        return ResultDTO.builder().data(newsTypeVO).count(0).code(1).msg("error").build();
    }

    @Override
    public ResultDTO addNewsType(NewsTypeVO newsTypeVO) {
        NewsType newsType= JSONCopy.copy(newsTypeVO, NewsType.class);
        int i=newsTypeDao.addNewsType(newsType);
        if(i==1){
            RedisTool.deleteToRedis("newsType");
            return ResultDTO.getDTO(i,newsTypeVO);
        }
        return ResultDTO.builder().data(newsTypeVO).count(0).code(1).msg("error").build();
    }

    @Override
    public ResultDTO deleteNewsType(NewsTypeVO newsTypeVO) {
        NewsType newsType= JSONCopy.copy(newsTypeVO, NewsType.class);
        int i=newsTypeDao.deleteNewsType(newsType);
        if(i==1){
            RedisTool.deleteToRedis("newsType");
            return ResultDTO.getDTO(i,newsTypeVO);
        }
        return ResultDTO.builder().data(newsTypeVO).count(0).code(1).msg("error").build();
    }

    @Override
    public ResultDTO updateNewsType(NewsTypeVO newsTypeVO) {
        NewsType newsType= JSONCopy.copy(newsTypeVO, NewsType.class);
        int i=newsTypeDao.updateNewsType(newsType);
        if(i==1){
            RedisTool.deleteToRedis("newsType");
            return ResultDTO.getDTO(i,newsTypeVO);
        }
        return ResultDTO.builder().data(newsTypeVO).count(0).code(1).msg("error").build();
    }

    @Override
    public ResultDTO findNewsType() {
        List<String> redisNewsType = RedisTool.findToRedis("newsType");
//        判断redis中是否有数据
        if(redisNewsType!=null){
//            返回redis中的数据,通过fastJson转换
            List<NewsType> list= JSON.parseObject(redisNewsType.toString(), new TypeReference<List<NewsType>>() {});
            return ResultDTO.getDTO(list.size(),list);
        }
//        没有则从数据库中找数据
        List<NewsType> list =newsTypeDao.findAllNewsType();
        if(list.size()>0){
//            Dao层数据迭代
            Iterator<NewsType> iterator=list.iterator();
            while (iterator.hasNext()){
                NewsType nt= iterator.next();
                if (nt.getEnable()==0){
                    iterator.remove();
                }else{
//                    将查到的数据放入redis
                    RedisTool.putToRedis("newsType", JSON.toJSONString(nt));
                }

            }
            return ResultDTO.getDTO(list.size(),list);
        }
        return ResultDTO.builder().data(list).msg("no data").count(0).code(1).build();
    }
}
